package com.ruov.plugin.wx.offiaccount.handler;

import cn.hutool.core.util.StrUtil;
import com.ruov.common.core.domain.R;
import com.ruov.common.core.redis.RedisCache;
import com.ruov.common.utils.StringUtils;
import com.ruov.plugin.wx.consts.RedisKeyConsts;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.session.WxSessionManager;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage;
import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage;
import me.chanjar.weixin.mp.util.WxMpConfigStorageHolder;

import java.util.Map;
import java.util.concurrent.TimeUnit;

/**
 * @author wjsmc
 * @date 2025/4/24 14:34
 * @description
 **/
@Slf4j
@AllArgsConstructor
public class ScanHandler extends AbstractHandler {

    private final RedisCache redisCache;

    @Override
    public WxMpXmlOutMessage handle(WxMpXmlMessage wxMessage, Map<String, Object> context, WxMpService wxMpService, WxSessionManager sessionManager) throws WxErrorException {
        String eventKey = wxMessage.getEventKey();
        if (StrUtil.startWith(wxMessage.getEventKey(), "qrscene_")) {
            eventKey = StrUtil.subAfter(eventKey, "qrscene_", true);
        }
        String loginUniqueKey = StringUtils.format(RedisKeyConsts.Offiaccount.LOGIN_UNIQUE_KEY, WxMpConfigStorageHolder.get(), eventKey);
        if (!redisCache.hasKey(loginUniqueKey)) {
            return WxMpXmlOutMessage.TEXT().content("您的登录已失效").build();
        }
        redisCache.setCacheObject(loginUniqueKey, wxMessage.getFromUser());
        return WxMpXmlOutMessage.TEXT().content("欢迎访问！").toUser(wxMessage.getFromUser()).fromUser(wxMessage.getToUser()).build();
    }
}
